home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / Libraries / SAT 2.1.2 / HeartQuest sample ƒ / sHeart.p < prev    next >
Encoding:
Text File  |  1994-06-02  |  2.8 KB  |  114 lines  |  [TEXT/PJMM]

  1. {===============================================}
  2. {================= Heart sprite unit ================}
  3. {===============================================}
  4.  
  5. { Example file for Ingemars Sprite Animation Toolkit. }
  6. { © Ingemar Ragnemalm 1992 }
  7. { See doc files for legal terms for using this code. }
  8.  
  9. unit sHeart;
  10.  
  11. { Sprite unit. A sprite unit should include the following routines:}
  12. { Init-procedure, that initializes private bitmaps}
  13. { Setup-procedure, that sets variables other than the standard ones set by MakeSprite }
  14. { Handle-procedure, to be called once per iteration until the sprite dies }
  15. { Hittask-procedure (optional), for advanced collission handling. }
  16.  
  17. interface
  18.  
  19.     uses
  20.         SAT, scores, sBonus, SoundConst, GameGlobals;
  21.  
  22.     var
  23.         batchcount: integer; { Number of hearts left on level }
  24.  
  25.     procedure InitHeart;
  26.     procedure SetupHeart (mp: SpritePtr);
  27.     procedure HandleHeart (me: SpritePtr);
  28.  
  29. implementation
  30.  
  31.     var
  32.         HeartFace: array[1..4] of FacePtr;
  33.         sofar: integer;
  34.  
  35.     procedure InitHeart;
  36.         var
  37.             ii: integer;
  38.     begin
  39.         for ii := 1 to 4 do
  40.             HeartFace[ii] := GetFace(135 + ii);
  41.     end;
  42.  
  43.     procedure SetupHeart (mp: SpritePtr);
  44.     begin
  45.         mp^.face := HeartFace[1];
  46.         mp^.mode := rand(4) + 1; { ikonnummer }
  47.         SetRect(mp^.hotRect, -5 + 16, -15 + 32, 5 + 16, -5 + 32);
  48.         mp^.speed.h := Rand(7) - 4;
  49.         mp^.speed.v := Rand(7) - 4;
  50.         sofar := 0;
  51.         mp^.task := @HandleHeart;
  52.     end;
  53.  
  54.     procedure HandleHeart (me: SpritePtr);
  55.         var
  56.             mp: SpritePtr;
  57.     begin
  58.         if me^.kind <> -2 then
  59.             begin
  60.                 me^.task := nil;
  61.                 addscore(10);
  62.                 SATSoundPlay(PlinkSndH, 1, false);
  63.                 batchcount := batchcount - 1;
  64.                 sofar := sofar + 1;
  65.  
  66.                 if sofar mod 5 = 0 then
  67.                     if rand(10) < 5 then
  68.                         mp := NewSprite(-4, -31, Rand(gSAT.offSizeV - 64) + 32, @SetupBonus)
  69.                     else
  70.                         mp := NewSprite(-4, gSAT.offSizeH, Rand(gSAT.offSizeV - 64) + 32, @SetupBonus);
  71.             end;
  72.  
  73.         me^.mode := me^.mode + 1;
  74.         if me^.mode = 5 then
  75.             me^.mode := 1;
  76.         me^.face := HeartFace[me^.mode];
  77.  
  78.         me^.position.h := me^.position.h + me^.speed.h;
  79.         me^.position.v := me^.position.v + me^.speed.v;
  80.  
  81.         if me^.position.h < 0 then
  82.             begin
  83.                 me^.position.h := 0;
  84.                 me^.speed.h := -me^.speed.h;
  85.                 me^.speed.v := me^.speed.v + Rand(3) - 2;
  86.             end;
  87.         if me^.position.h > gSAT.offSizeH - xsize then
  88.             begin
  89.                 me^.position.h := gSAT.offSizeH - xsize;
  90.                 me^.speed.h := -me^.speed.h;
  91.                 me^.speed.v := me^.speed.v + Rand(3) - 2;
  92.             end;
  93.         if me^.position.v < 0 then
  94.             begin
  95.                 me^.position.v := 0;
  96.                 me^.speed.v := -me^.speed.v;
  97.                 me^.speed.h := me^.speed.h + Rand(3) - 2;
  98.             end;
  99.         if me^.position.v > gSAT.offSizeV - 32 then
  100.             begin
  101.                 me^.position.v := gSAT.offSizeV - 32;
  102.                 me^.speed.v := -me^.speed.v;
  103.                 me^.speed.h := me^.speed.h + Rand(3) - 2;
  104.             end;
  105. { It shouldn't be totally still! }
  106.         if (me^.speed.v = 0) and (me^.speed.h = 0) then
  107.             begin
  108.                 me^.speed.h := Rand(7) - 4;
  109.                 me^.speed.v := Rand(7) - 4;
  110.             end;
  111.  
  112.     end;
  113.  
  114. end.